using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IndoorsTools
{
    /// <summary>
    /// <para>Create Indoors Database</para>
    /// <para>Adds the necessary datasets, feature classes, tables, and configurations to a geodatabase to host ArcGIS Indoors data.</para>
    /// <para>将必要的数据集、要素类、表和配置添加到地理数据库以托管 ArcGIS Indoors 数据。</para>
    /// </summary>    
    [DisplayName("Create Indoors Database")]
    public class CreateIndoorsDatabase : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateIndoorsDatabase()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_target_gdb">
        /// <para>Target Geodatabase</para>
        /// <para>The geodatabase that will contain the ArcGIS Indoors Information Model to manage indoor GIS information for use with Indoors apps.</para>
        /// <para>将包含 ArcGIS Indoors 信息模型的地理数据库，用于管理用于 Indoors 应用程序的室内 GIS 信息。</para>
        /// </param>
        public CreateIndoorsDatabase(object _target_gdb)
        {
            this._target_gdb = _target_gdb;
        }
        public override string ToolboxName => "Indoors Tools";

        public override string ToolName => "Create Indoors Database";

        public override string CallName => "indoors.CreateIndoorsDatabase";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_target_gdb, _updated_gdb, _create_network.GetGPValue()];

        /// <summary>
        /// <para>Target Geodatabase</para>
        /// <para>The geodatabase that will contain the ArcGIS Indoors Information Model to manage indoor GIS information for use with Indoors apps.</para>
        /// <para>将包含 ArcGIS Indoors 信息模型的地理数据库，用于管理用于 Indoors 应用程序的室内 GIS 信息。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_gdb { get; set; }


        /// <summary>
        /// <para>Updated Geodatabase</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_gdb { get; set; }


        /// <summary>
        /// <para>Create Indoors Network</para>
        /// <para><xdoc>
        ///   <para>Specifies whether a network dataset containing the indoor transportation network feature classes—Landmarks, Pathways, and Floor Transitions—will be created in the Indoors database.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—A network dataset and feature classes will be created. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—A network dataset and feature classes will not be created.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否将在 Indoors 数据库中创建包含室内交通网络要素类（Landmarks、Pathways 和 Floor Transitions）的网络数据集。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将创建网络数据集和要素类。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将不创建网络数据集和要素类。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Create Indoors Network")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _create_network_value _create_network { get; set; } = _create_network_value._true;

        public enum _create_network_value
        {
            /// <summary>
            /// <para>CREATE_NETWORK</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CREATE_NETWORK")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_CREATE_NETWORK</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_CREATE_NETWORK")]
            [GPEnumValue("false")]
            _false,

        }

        public CreateIndoorsDatabase SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}